package com.uc3m.dsic.gestorZoo;

import java.sql.*;
import java.util.*;

/**
 * En esta clase se encuentran todos las operaciones que tratan principalmente
 * con cuidadores
 * 
 * @author Javier Roca García
 */
public class GestorCuidador {


    /**
     * Dado una especialidad, devuelve todos cuidadores de esa especialidad
     *
     * @param especialidad
     *          especialidad del cuidador
     *
     * @return Un Arraylist con los cuidadores de esa especialidad
     *
     * @throws Exception si se produce cualquier tipo de error.
     */
    public ArrayList<Cuidador> getCuidadorByEspecialidad(String especialidad)
            throws Exception {

        ResultSet rsCuidador;
        ArrayList<Cuidador> resultado;
        Cuidador cuidador;
        String nombreCuidador;
        String apellido1Cuidador;
        String apellido2Cuidador;
        String idCuidador;
        int telefonoCuidador;
        int edadCuidador;
        String especialidadCuidador = null;
        String estadoCuidador;
        resultado = new ArrayList<Cuidador>();
        int aux = 0;

        GestorZooInterface prueba = new GestorZooAplicacion();
        rsCuidador = prueba.getTabla(GestorZooAplicacion.Tablas.CUIDADOR);

        while (rsCuidador.next()) {
            especialidadCuidador = rsCuidador.getString(7).toUpperCase();
            if (especialidad.toUpperCase().equals(especialidadCuidador)) {
                idCuidador = rsCuidador.getString(1).toUpperCase();
                nombreCuidador = rsCuidador.getString(2).toUpperCase();
                apellido1Cuidador = rsCuidador.getString(3).toUpperCase();
                apellido2Cuidador = rsCuidador.getString(4).toUpperCase();
                telefonoCuidador = rsCuidador.getInt(5);
                edadCuidador = rsCuidador.getInt(6);
                estadoCuidador = rsCuidador.getString(8).toUpperCase();
                cuidador = new Cuidador(idCuidador, nombreCuidador, apellido1Cuidador,
                        apellido2Cuidador, telefonoCuidador, edadCuidador,
                        especialidadCuidador, estadoCuidador);
                aux = 1;
                resultado.add(cuidador);
            }
        }
        
        if (aux == 0) {
            throw new ZooException("No existe ninguna ocurrencia en la " +
                    "base de datos con la cadena proporcionada.\n" +
                    "Las especialidades solo pueden ser: Cuidador, " +
                    "Nutricionista, Veterinario o Domador.");
        }

        
        return resultado;
    }

     /**
     * Devuelve el numero de cuidadores que existen
     *
     * @return Numero total de cuidadores
     *
     * @throws Exception si se produce cualquier tipo de error.
     */
    public int getNumCuidadoress(GestorZooInterface izoo) throws Exception {
        String especialidad;
        ResultSet rsCuidador;
        int numero = 0;

        rsCuidador = izoo.getTabla(GestorZooAplicacion.Tablas.CUIDADOR);

        while (rsCuidador.next()) {
            especialidad = rsCuidador.getString(7).toUpperCase();
            if(especialidad.compareTo("CUIDADOR") == 0)
                numero++;
        }

        return numero;
    }

    /**
     * Obtiene el resultado concreto de la base de datos proporcionado por un
     * identificador de cuidador
     * @param id_cuidador
     *              Identificador del cuidador
     * @return Fila con todos los campos coincidentes con la clave proporcionada
     * @throws ZooException
     * @throws Exception
     */
    public Cuidador getCuidadorbyId(String id_cuidador) throws ZooException, Exception{

        ResultSet rstemp;
        Cuidador nuevo_cuidador = null;

        String idCuidador, nombreCuidador, apellido1Cuidador, apellido2Cuidador,
                especialidadCuidador, estadoCuidador;
        int telefonoCuidador, edadCuidador;

            GestorZooInterface gtemp = new GestorZooAplicacion();
            rstemp = gtemp.getTabla(GestorZooAplicacion.Tablas.CUIDADOR);

            while (rstemp.next()) {
                idCuidador = rstemp.getString(1).toUpperCase();
                if (id_cuidador.toUpperCase().trim().equals(idCuidador)) {
                    nombreCuidador = rstemp.getString(2).toUpperCase();
                    apellido1Cuidador = rstemp.getString(3).toUpperCase();
                    apellido2Cuidador = rstemp.getString(4).toUpperCase();
                    telefonoCuidador = rstemp.getInt(5);
                    edadCuidador = rstemp.getInt(6);
                    especialidadCuidador = rstemp.getString(7).toUpperCase();
                    estadoCuidador = rstemp.getString(8).toUpperCase();
                    nuevo_cuidador = new Cuidador (idCuidador, nombreCuidador,
                            apellido1Cuidador, apellido2Cuidador,
                            telefonoCuidador, edadCuidador,
                            especialidadCuidador, estadoCuidador);
                    break; //salimos, solo puede haber una id_sala unico
                }
            }
        return nuevo_cuidador;
    }
}
